/**
 * 
 */
package edu.erpan.fachada;

import java.util.List;

import edu.erpan.bl.entities.Formulacion;
import edu.erpan.bl.entities.Producto;
import edu.erpan.util.entityManager.exceptions.IdNotFoundException;
import edu.erpan.util.entityManager.exceptions.PersistException;
import edu.erpan.util.entityManager.exceptions.QueryException;


/**
 * @author Jeison
 *
 */
public interface IProductoFachada {

	/**
	 * Consultar un producto dados los parametros
	 * 
	 * @param producto
	 * @return
	 * @throws QueryException
	 * @throws IdNotFoundException 
	 */
	public Producto consultarProducto(Producto producto) throws QueryException, IdNotFoundException;
	
	/**
	 * Consultar todos los productos
	 * 
	 * @param producto
	 * @return
	 * @throws QueryException
	 * @throws IdNotFoundException 
	 */
	public List<Producto> consultarProductos() throws QueryException;
	
	/**
	 * Guardar un producto
	 * 
	 * @param producto
	 * @throws PersistException
	 */
	public void guardarProducto(Producto producto) throws PersistException;
	
	/**
	 * Editar un producto
	 * 
	 * @param producto
	 * @throws PersistException
	 * @throws IdNotFoundException 
	 * @throws QueryException 
	 */
	public void editarProducto(Producto producto) throws QueryException, IdNotFoundException;
	/**
	 * Consultar las formulaciones de un producto
	 * 
	 * @param producto
	 * @return lista de formulaciones
	 * @throws QueryException
	 */
	public List<Formulacion> consultarFormulaciones(Producto producto) throws QueryException;
	
	/**
	 * Guardar la formulacion de un producto
	 * 
	 * @param formulacion
	 * @throws PersistException
	 */
	public void guardarFormulacion(Formulacion formulacion) throws PersistException;
	
	/**
	 * Editar la formulacion de un producto
	 * 
	 * @param formulacion
	 * @throws QueryException
	 */
	public void editarFormulacion(Formulacion formulacion) throws QueryException;
	
	/**
	 * Eliminar la formulacion de un producto
	 * 
	 * @param formulacion
	 * @throws QueryException
	 */
	public void eliminarFormulacion(Formulacion formulacion) throws QueryException;

	/**
	 * Eliminar un producto
	 * 
	 * @param producto
	 * @throws QueryException
	 * @throws IdNotFoundException
	 */
	void eliminarProducto(Producto producto) throws QueryException,
			IdNotFoundException;

}
